#ifndef PREFERENCES_HPP
#define PREFERENCES_HPP

// Créé avec XmlCppClassGenerator version 2.0 beta.

#include <QtCore/QSettings>

#include <QtGlobal>

/** Classe qui permet de gérer les préférence de l'utilisateur.
 *
 * La classe hérite de QSettings, ce qui permet de faciliter la lecture /
 * écriture du fichier de préférences tout en autorisant de redéfinir une
 * interface.
 *
 * La classe est pensée comme un singleton: il n'y a qu'une instance de
 * @c Preference.
 *
 * @author Johan "Solo" Luisier
 * @date Mai 2012
 */
class Preferences : public QSettings
{
public:
  /** Méthode qui donne accès à l'instance de \c Preference.
   *
   * Lors du premier appel, on construit l'instance, qui charge alors toutes
   * les informations voulues.
   *
   * Le no de l'application, le domaine et nom de l'organisation sont également
   * définis ici lors du premier appel.
   *
   * @return un pointeur constant sur Instance.
   */
  static const Preferences* instance();
  /** Permet d'accéder à NomAgence.
    *
    * @return une référence constante sur NomAgence.
    */
  const QString& nomAgence() const;
  /** Permet d'accéder à PassAPI.
    *
    * @return une référence constante sur PassAPI.
    */
  const QString& passAPI() const;
  /** Permet d'accéder à ProbabiliteMinimale.
    *
    * @return une référence constante sur ProbabiliteMinimale.
    */
  const unsigned& probabiliteMinimale() const;
  /** Permet d'accéder à GainMinimal.
    *
    * @return une référence constante sur GainMinimal.
    */
  const unsigned& gainMinimal() const;
  protected:
  /** Nom de l'agence.
   */
  QString NomAgence;
  /** Mot de passe API de l'agence, est stocké sous forme cryptée dans le
   * fichier.
   */
  QString PassAPI;
  /** Probabilité minimale de réussite d'un contrat pour l'afficher.
   */
  unsigned ProbabiliteMinimale;
  /** Gain minimal d'un contrat pour l'afficher.
   *
   * Le gain tient en compte le coût de l'équipement \e temporaire ainsi que
   * la prime du monstre.
   */
  unsigned GainMinimal;
  private:
  /** Constructeur.
   * Initialise la classe mère, lit les valeurs des membres.
   *
   * Est @c private pour qu'il soit impossible de créer une instance.
   */
  Preferences();
  /** Constructeur de copie.
   *
   * N'est pas déclaré pour éviter de dupliquer notre instance.
   *
   * @param[in] preferences instance à dupliquer.
   */
  Preferences( const Preferences& preferences );
  /** Destructeur
   *
   * Est @c private pour éviter de supprimer l'instance.
   */
  virtual ~Preferences();
  /** Opérateur d'affectation.
   *
   * N'est pas définit pour éviter toute copie.
   *
   * @param[in] preferences instance à dupliquer.
   *
   * @return une référence sur l'instance courante.
   */
  Preferences& operator=( const Preferences& preferences );
  /** Pointeur sur l'instance de \c Preference.
   * Est initialisé au premier appel à instance().
   */
  static Preferences* Instance;
  /** Clé de cryptage pour cacher la valeur du mot de passe dans le fichier de
    * préférences.
    */
  static const qint64 ClefCryptage;
};


#endif // PREFERENCES_HPP
